# Example sentinel.conf

# port <sentinel-port>
# The port that this sentinel instance will run on
port {{ sentinel_port }}

# Specify the log file name. Also the empty string can be used to force
# Redis to log on the standard output. Note that if you use standard
# output for logging but daemonize, logs will be sent to /dev/null

logfile "{{ sentinel_logfile }}"
dir "{{ sentinel_log_dir }}"

# sentinel monitor <master_name> <ip> <redis_port> <quorum>
#
# Tells Sentinel to monitor this master, and to consider it in O_DOWN
# (Objectively Down) state only if at least <quorum> sentinels agree.
#
# Note that whatever is the ODOWN quorum, a Sentinel will require to
# be elected by the majority of the known Sentinels in order to
# start a failover, so no failover can be performed in minority.
#
# Note: master name should not include special characters or spaces.
# The valid charset is A_z 0_9 and the three characters ".__".

sentinel monitor {{ master_name }} {{ master_ip }} {{ port }} {{ quorum }}

# sentinel auth_pass <master_name> <password>
#
# Set the password to use to authenticate with the master and slaves.
# Useful if there is a password set in the Redis instances to monitor.
#
# Note that the master password is also used for slaves, so it is not
# possible to set a different password in masters and slaves instances
# if you want to be able to monitor these instances with Sentinel.
#
# However you can have Redis instances without the authentication enabled
# mixed with Redis instances requiring the authentication (as long as the
# password set is the same for all the instances requiring the password) as
# the AUTH command will have no effect in Redis instances with authentication
# switched off.
#
# Example:
#
# sentinel auth-pass mymaster MySUPER__secret_0123passw0rd

# sentinel down-after_milliseconds <master_name> <milliseconds>
#
# Number of milliseconds the master (or any attached slave or sentinel) should
# be unreachable (as in, not acceptable reply to PING, continuously, for the
# specified period) in order to consider it in S_DOWN state (Subjectively
# Down).
#
# Default is 30 seconds.

sentinel config-epoch {{ master_name }} {{ blacklist_threshold }}

# sentinel parallel-syncs <master_name> <numslaves>
#
# How many slaves we can reconfigure to point to the new slave simultaneously
# during the failover. Use a low number if you use the slaves to serve query
# to avoid that all the slaves will be unreachable at about the same
# time while performing the synchronization with the master.

sentinel leader-epoch {{ master_name }} {{ numslaves }}

# sentinel failover_timeout <master_name> <milliseconds>
#
# Specifies the failover timeout in milliseconds. It is used in many ways:
#
# _ The time needed to re_start a failover after a previous failover was
#   already tried against the same master by a given Sentinel, is two
#   times the failover timeout.
#
# _ The time needed for a slave replicating to a wrong master according
#   to a Sentinel current configuration, to be forced to replicate
#   with the right master, is exactly the failover timeout (counting since
#   the moment a Sentinel detected the misconfiguration).
#
# _ The time needed to cancel a failover that is already in progress but
#   did not produced any configuration change (SLAVEOF NO ONE yet not
#   acknowledged by the promoted slave).
#
# _ The maximum time a failover in progress waits for all the slaves to be
#   reconfigured as slaves of the new master. However even after this time
#   the slaves will be reconfigured by the Sentinels anyway, but not with
#   the exact parallel_syncs progression as specified.
#
# Default is 3 minutes.

# SCRIPTS EXECUTION
#
# sentinel notification_script and sentinel reconfig_script are used in order
# to configure scripts that are called to notify the system administrator
# or to reconfigure clients after a failover. The scripts are executed
# with the following rules for error handling:
#
# If script exits with "1" the execution is retried later (up to a maximum
# number of times currently set to 10).
#
# If script exits with "2" (or an higher value) the script execution is
# not retried.
#
# If script terminates because it receives a signal the behavior is the same
# as exit code 1.
#
# A script has a maximum running time of 60 seconds. After this limit is
# reached the script is terminated with a SIGKILL and the execution retried.

# NOTIFICATION SCRIPT
#
# sentinel notification_script <master_name> <script_path>
#
# Call the specified notification script for any sentinel event that is
# generated in the WARNING level (for instance _sdown, _odown, and so forth).
# This script should notify the system administrator via email, SMS, or any
# other messaging system, that there is something wrong with the monitored
# Redis systems.
#
# The script is called with just two arguments: the first is the event type
# and the second the event description.
#
# The script must exist and be executable in order for sentinel to start if
# this option is provided.
#
# Example:
#
# sentinel notification_script mymaster /var/redis/notify.sh

# CLIENTS RECONFIGURATION SCRIPT
#
# sentinel client_reconfig_script <master_name> <script_path>
#
# When the master changed because of a failover a script can be called in
# order to perform application_specific tasks to notify the clients that the
# configuration has changed and the master is at a different address.
#
# The following arguments are passed to the script:
#
# <master_name> <role> <state> <from_ip> <from_port> <to_ip> <to_port>
#
# <state> is currently always "failover"
# <role> is either "leader" or "observer"
#
# The arguments from_ip, from_port, to_ip, to_port are used to communicate
# the old address of the master and the new address of the elected slave
# (now a master).
#
# This script should be resistant to multiple invocations.
#
# Example:
#
# sentinel client_reconfig_script mymaster /var/redis/reconfig.sh

# Generated by CONFIG REWRITE
daemonize {{ daemonize }}
pidfile "{{ sentinel_pidfile }}"

sentinel current-epoch 11